<template>
  <div class="table">
      <div class="container">
        <div class="handle-box">
            <el-input class="handle-input" v-model="select_word" size="mini" placeholder="请输入要查询的歌手名"></el-input>
            <el-button type="primary" size="mini" @click="centerDialogVisible = true">添加歌手</el-button>
            <el-button type="danger" size="mini" @click="delAll">批量删除</el-button>
        </div>
      </div>
       <el-table size="mini" ref="multipleTable" border style="width:100%" height="600px" :data="data" @selection-change="handleSelectionChange">
            <el-table-column  type="selection" width="40"></el-table-column>
            <el-table-column label="歌手图片" width="110" align="center">
                <template slot-scope="scope"> 
                    <div class="singer-img">
                        <img :src="getUrl(scope.row.pic)" style="width:100%"/>
                    </div>
                    <el-upload :action="uploadUrl(scope.row.id)" :before-upload="beforeAvatorUpload" 
                        :on-success="handleAvatorSuccess">
                        <el-button size="mini">更新图片</el-button>
                    </el-upload>
                </template>
            </el-table-column>
             <el-table-column prop="name" label="歌手" width="120" align="center"></el-table-column>
             <el-table-column label="性别" width="50" align="center">
                <template slot-scope="scope">
                    {{changeSex(scope.row.sex)}}
                </template>
            </el-table-column>
            <el-table-column label="生日" width="120" align="center">
                <template slot-scope="scope">
                    {{attachBirth(scope.row.birth)}}
                </template>
            </el-table-column>
            <el-table-column prop="location" label="地区" width="100" align="center"></el-table-column>
            <el-table-column label="简介">
                <template slot-scope="scope">
                    <p style="height:100px;overflow:scroll">{{scope.row.introduction}}</p>
                </template>
            </el-table-column>
            <el-table-column label="歌曲管理" width="110" align="center">
                <template slot-scope="scope">
                   <el-button type="info" round size="mini" @click="songEdit(scope.row.id,scope.row.name)">歌曲管理</el-button>
                </template>
            </el-table-column>
            <el-table-column label="操作" width="150" align="center">
              <template slot-scope="scope">
                  <el-button size="mini" type="primary" round @click="handleEdit(scope.row)">编辑</el-button>
                  <el-button size="mini" type="danger" @click="handleDelete(scope.row.id)">删除</el-button>
              </template>
            </el-table-column>        
        </el-table>
        <div class="pagenation">
            <el-pagination 
            background 
            layout="total,prev,pager,next"
            :total="tableData.length" 
            :current-page="currentPage" 
            :page-size="pageSize" 
            @current-change="handleCurrentChange" ></el-pagination>
        </div>
      <el-dialog title="添加歌手" :visible.sync="centerDialogVisible" width="400px" center>
          <el-form :model="registerForm" ref="registerForm" label-width="80px" :rules="rules">
              <el-form-item prop="name" label="歌手名" size ="mini">
                <el-input v-model="registerForm.name" placeholder="歌手名"></el-input>
              </el-form-item>
              <el-form-item prop="sex" label="性别" size ="mini">
                <el-radio-group v-model="registerForm.sex">
                  <el-radio :label="0">女</el-radio>
                  <el-radio :label="1">男</el-radio>
                  <el-radio :label="2">组合</el-radio>
                  <el-radio :label="3">不明</el-radio>
                </el-radio-group>
              </el-form-item>
              <el-form-item prop="birth" label="生日" size ="mini">
                <el-date-picker type="date" v-model="registerForm.birth" placeholder="选择日期" style="width:100%"></el-date-picker>
              </el-form-item>
              <el-form-item prop="location" label="地区" size ="mini">
                <el-input v-model="registerForm.location" placeholder="地区"></el-input>
              </el-form-item>
              <el-form-item prop="introduction" label="简介" size ="mini">
                <el-input v-model="registerForm.introduction" placeholder="简介" type="textarea"></el-input>
              </el-form-item>        
          </el-form>
          <span slot="footer">
            <el-button type="info" round size="mini" @click="centerDialogVisible = false">取消</el-button>
            <el-button type="primary" round size="mini" @click="addSinger">确定</el-button>
          </span>
      </el-dialog>
      <el-dialog title="修改歌手" :visible.sync="editVisible" width="400px" center>
          <el-form :model="editForm" ref="editForm" label-width="80px" :rules="rules">
              <el-form-item prop="name" label="歌手名" size ="mini">
                <el-input v-model="editForm.name" placeholder="歌手名"></el-input>
              </el-form-item>
              <el-form-item prop="sex" label="性别" size ="mini">
                <el-radio-group v-model="editForm.sex">
                  <el-radio :label="0">女</el-radio>
                  <el-radio :label="1">男</el-radio>
                  <el-radio :label="2">组合</el-radio>
                  <el-radio :label="3">不明</el-radio>
                </el-radio-group>
              </el-form-item>
              <el-form-item label="生日" size ="mini">
                <el-date-picker type="date" v-model="editForm.birth" placeholder="选择日期" style="width:100%"></el-date-picker>
              </el-form-item>
              <el-form-item prop="location" label="地区" size ="mini">
                <el-input v-model="editForm.location" placeholder="地区"></el-input>
              </el-form-item>
              <el-form-item prop="introduction" label="简介" size ="mini">
                <el-input v-model="editForm.introduction" placeholder="简介" type="textarea"></el-input>
              </el-form-item>        
          </el-form>
          <span slot="footer">
            <el-button type="info" size="mini" @click="editVisible = false">取消</el-button>
            <el-button type="primary" size="mini" @click="editSave">确定</el-button>
          </span>
    </el-dialog>
    <el-dialog title="删除歌手" :visible.sync="delVisible" width="300px" center>     
        <div align="center">一经删除，不可恢复！请确认是否删除？</div>   
          <span slot="footer">
            <el-button type="info" size="mini" @click="delVisible = false">取消</el-button>
            <el-button type="warning" size="mini" @click="deleteRow">确定</el-button>
          </span>
    </el-dialog>
    <el-dialog title="批量删除歌手" :visible.sync="delAllVisible" width="300px" center>     
        <div align="center">一经删除，不可恢复！请确认是否删除？</div>   
          <span slot="footer">
            <el-button type="" size="mini" @click="delAllVisible = false">取消</el-button>
            <el-button type="" size="mini" @click="deleteRow">确定</el-button>
          </span>
    </el-dialog>
  </div>
</template>

<script>
import {setSinger,getAllSinger,updateSinger,delSinger} from "../api/index";
import {mixin} from "../mixins/index";
export default {
  mixins: [mixin],
  data(){
    return{
      centerDialogVisible: false,   //添加弹框是否显示
      editVisible: false,           //操作弹框是否显示
      delVisible: false,            //删除弹窗是否显示
      delAllVisible: false,         //批量删除弹窗是否显示
            registerForm:{      //添加框
                name: '',
                sex: '',
                birth: '',
                location: '',
                introduction: ''
            },
            editForm:{      //编辑框
                id: '',
                name: '',
                sex: '',
                birth: '',
                location: '',
                introduction: ''
            },
      tableData: [],    //el-table数据
      tempData: [],     //查询事件发生时要展示的数据你需要for循环展示的数据
      select_word: '',  //input绑定的查询关键词
      pageSize: 4,      //分页每页的大小
      currentPage: 1,   //当前页
      idx: -1,          //当前选择的歌手（单项删除）
      multipleSelection: [],    //选中了什么歌手项
      rules: {
                name: [
                    {required: true,message: '请输入歌手名',trigger: 'blur'}
                ],
                birth: [
                  {required:true,message: '请输入生日/诞生日',trigger: 'blur'}
                ],
                introduction: [
                    {required: true,message: '请输入歌手介绍',trigger: 'blur'}
                ],
                location: [
                    {required: true,message: '请输入所属地区',trigger: 'blur'}
                ] 
       }          
    }
  },
  computed: {
    //计算当前搜索结果表里的数据
    data() {
      return this.tableData.slice((this.currentPage -1) * this.pageSize,this.currentPage * this.pageSize)
    },
  
  },
  watch: {
    //搜索框里的内容发生变化时候，搜索结果table列表的内容跟着发生变化
    select_word: function(){
      if(this.select_word == ''){
        this.tableData = this.tempData;
      }else{
        this.tableData = [];
        for(let item of this.tempData){
          if(item.name.includes(this.select_word)){
            this.tableData.push(item);
          }
        }
      }
    },
    
  },
  created(){
        this.getData();
    },
  methods: {
     //查询所有歌手
        getData(){
            this.tempData = [];
            this.tableData = [];
            getAllSinger().then(res => {             
                this.tableData = res;
                this.tempData = res;
                this.currentPage = 1;
            })
        },
     //添加歌手
        addSinger(){
          this.$refs['registerForm'].validate(valid =>{
            if(valid){
                let d = this.registerForm.birth;
                let datetime = d.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate();
                let params = new URLSearchParams();
                params.append('name',this.registerForm.name);
                params.append('sex',this.registerForm.sex);
                params.append('pic','/img/singerPic/hhh.jpg');
                params.append('birth',datetime);
                params.append('location',this.registerForm.location);
                params.append('introduction',this.registerForm.introduction);

                setSinger(params)
                .then(res => {
                    if(res.code == 1){
                      this.getData();
                      this.notify("添加成功","success");
                    }else{
                      this.notify("添加失败","error");
                    }
                })
                .catch(err => {
                    console.log(err);
                });
                this.centerDialogVisible = false;
            }
          })
        },
        //修改歌手，弹出编辑页面
        handleEdit(row){
          this.editVisible = true;
          this.editForm = {
            id: row.id,
            name: row.name,
            sex: row.sex,
            birth: row.birth,
            location: row.location,
            introduction: row.introduction,
          }
        },
        //保存编辑页面,修改歌手
        editSave(){
          this.$refs['editForm'].validate(valid =>{
            if(valid){
                let d = new Date(this.editForm.birth);
                let datetime = d.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate();
                let params = new URLSearchParams();
                params.append('id',this.editForm.id);
                params.append('name',this.editForm.name);
                params.append('sex',this.editForm.sex);
                params.append('birth',datetime);
                params.append('location',this.editForm.location);
                params.append('introduction',this.editForm.introduction);

                updateSinger(params)
                .then(res => {
                    if(res.code == 1){
                      this.getData();
                      this.notify("修改成功","success");
                    }else{
                      this.notify("修改失败","error");
                    }
                })
                .catch(err => {
                    console.log(err);
                });
                this.editVisible = false;
            }
          })    
        },
        //删除
        deleteRow(){
          delSinger(this.idx)
          .then(res => {
                if(res){
                  this.getData();
                  this.notify("删除成功","success");
                }else{
                  this.notify("删除失败","error");
                }
            })
            .catch(err => {
                console.log(err);
            });
            this.delVisible = false;
        },
        
        //更新图片
        uploadUrl(id){
            return `${this.$store.state.HOST}/singer/updateSingerPic?id=${id}`
        },
        //获取当前页
        handleCurrentChange(val){
            this.currentPage = val;
        } ,   
        //超链接跳转歌曲管理界面
        songEdit(id,name){
            this.$router.push({path:`/Song`,query:{id,name}});
        },
  },
}
</script>

<style scoped>
  .handle-box{
    margin-bottom: 20px;
    display: flex;
    justify-content: flex-end;
  }
   .singer-img{
        width: 100%;
        height: 80px;
        border-radius: 5px;
        margin-bottom: 5px;
        overflow: hidden;
    }
    .handle-input{
      width: 300px;
      display: inline-block;
    }
    .pagenation{
      display: flex;
      justify-content: center;
    }
</style>